package com.hk.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;

import com.hk.sqlsession.SqlSession;
import com.mysql.cj.x.protobuf.MysqlxCrud.Collection;

/**
 * 动态代理生成的代理类  实现InvocationHandler
 * 执行invoke（） 调用相应的查询方法  
 * @author le-px
 *
 */
public class MyMapperProxy implements InvocationHandler {
	private SqlSession sqlSession;
	public MyMapperProxy(SqlSession sqlSession) {
		this.sqlSession = sqlSession;
	}
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		System.out.println("...");
		//得到方法的返回至类型
		Class<?> returnType = method.getReturnType();
		String methodName = method.getName();
		String name = method.getDeclaringClass().getName();
		//判断返回至的类型，选择不同的方法   MySqlSession 去调用方法
		if(List.class.isAssignableFrom(returnType)) {
			//是否是collection类型的    list
			return sqlSession.selectList(name+methodName ,args);
		}else if(Map.class.isAssignableFrom(returnType)) {
			//是否是Map类型的
			return sqlSession.selectMap(name+methodName ,args);
		}else {
			//对象
			return sqlSession.selectOne(name+methodName ,args);
		}
	}

}
